package javacroft.business;

import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;

/**
 * Année
 * @author hind
 */
public class Annee
{

    private String unNom;
    private List<Semestre> lesSemestres;

    /**
     * Constructeur
     * @param unNom Nom de l'année
     */
    public Annee(String unNom)
    {
        this.unNom = unNom;
        lesSemestres = new ArrayList<Semestre>();
    }

    /**
     * Constructeur
     * @param unNom Nom de l'année
     * @param mesSemestres Liste des semestres
     */
    public Annee(String unNom, List<Semestre> mesSemestres)
    {
        this.unNom = unNom;
        this.lesSemestres = mesSemestres;
    }

    /**
     * Nom de l'année
     * @return Nom de l'année
     */
    public String getNom()
    {
        return this.unNom;
    }

    /**
     * Liste des semestres
     * @return Liste des semestres
     */
    public List<Semestre> getLesSemestres()
    {
        return this.lesSemestres;
    }

    /**
     * Modifie la liste des semestres
     * @param mesSemestres Liste des semestres
     */
    public void setLesSemestres(List<Semestre> mesSemestres)
    {
        this.lesSemestres = mesSemestres;
    }

    /**
     * Liste des UE de l'année
     * @return Liste des UE
     */
    public List<UE> getSesUE()
    {
        List<UE> lesUE = new ArrayList<UE>();

        Iterator iter = lesSemestres.iterator();

        while (iter.hasNext())
        {
            ((ArrayList) lesUE).addAll(((Semestre) iter.next()).getLesUE());
        }

        return lesUE;

    }

    /**
     * Liste des ECUE de l'année
     * @return Liste des ECUE
     */
    public List<String> getSesECUE()
    {
        List<ECUE> lesECUE = new ArrayList<ECUE>();
        List<String> res = new ArrayList<String>();

        Iterator iter = getSesUE().iterator();

        while (iter.hasNext())
        {
            ((ArrayList) lesECUE).addAll(((UE) iter.next()).getLesECUE());
        }

        iter = lesECUE.iterator();

        while (iter.hasNext())
        {
            res.add(((ECUE) iter.next()).getNom());
        }

        return res;

    }

    /**
     * Liste des noms d'UE correspondant à l'année
     * @return Liste de String
     */
    public List<String> getSesUEString()
    {
        List<String> res = new ArrayList<String>();
        Iterator iter = getSesUE().iterator();
        while (iter.hasNext())
        {
            res.add(((UE) iter.next()).getNom());
        }

        return res;
    }

    /**
     * Semestre correspondant à un nom
     * @param nomSemestre Nom du semestre
     * @return Le semestre
     */
    public Semestre getLeSemestre(String nomSemestre)
    {
        Iterator iter = lesSemestres.iterator();
        Semestre semestreCourant = null;

        while (iter.hasNext() && !((semestreCourant = (Semestre) iter.next()).compareTo(nomSemestre)))
        {
            continue;
        }

        return semestreCourant;
    }

    @Override
    public String toString()
    {
        return this.getNom();
    }

    /**
     * Compare avec une autre année
     * @param uneAnnee Année à comparer
     * @return Comparaison
     */
    public boolean compareTo(Annee uneAnnee)
    {
        return this.unNom.equalsIgnoreCase(uneAnnee.getNom());
    }

    /**
     * Compare avec un autre nom d'année
     * @param nom Nom de l'année à comparer
     * @return Comparaison
     */
    public boolean compareTo(String nom)
    {
        return this.unNom.equalsIgnoreCase(nom);
    }

    /**
     * Ajoute un semestre dans la liste
     * @param semestre Semestre à comparer
     */
    public void ajouterSemestre(Semestre semestre)
    {
        lesSemestres.add(semestre);
    }
}
